//
// Description: 151. 反转字符串中的单词
// Created by Loading on 2025/3/19.
//

#include <bits/stdc++.h>

using namespace std;

string reverseWords(string s) {
    reverse(s.begin(), s.end());

    int n = s.size();
    // 最终字符串的长度索引
    int index = 0;
    for (int i = 0; i < n; ++i) {
        if (s[i] != ' ') {
            // 每个单词后追加一个空格
            if (index != 0) {
                s[index++] = ' ';
            }

            int j = i;
            while (j < n && s[j] != ' ') {
                s[index++] = s[j++];
            }
            // 反转单词
            reverse(s.begin() + index - (j - i), s.begin() + index);
            // 更新下一个单词的检索位置
            i = j;
        }
    }
    // 清除后面无效字符
    s.erase(index);

    return s;
}

int main() {
    string s = "a good   example";

    auto res = reverseWords(s);

    cout << res << endl;

    return 0;
}
